Описание
BOF - возвращает значение, показывающее, расположен
ли указатель текущей записи в позиции перед первой записью объекта
Recordset.
EOF - возвращает значение, показывающее,
расположен ли указатель текущей записи в позиции после последней записи объекта
Recordset.
Значение
Возвращаемые значения свойств BOF и EOF имеют тип
данных Boolean.
Свойство BOF возвращает значение True,
если указатель текущей записи расположен перед первой записью набора записей, и
значение False, если указатель текущей записи расположен на первой записи
набора или на любой записи после нее.
Свойство EOF возвращает значение
True, если указатель текущей записи расположен после последней записи
набора, и значение False, если указатель текущей записи расположен на
последней записи набора или на любой записи перед ней.
Замечания
Свойства BOF и EOF используют для проверки наличия
записей в объекте Recordset, а также для сообщения о выходе за пределы
объекта при перемещении от записи к записи.
Возвращаемые значения свойств
BOF и EOF определяются положением указателя текущей
записи.
Если любое из свойств BOF или EOF имеет значение
True, текущая запись не определена.
При открытии объекта
Recordset, не содержащего ни одной записи, оба свойства BOF и
EOF получают значение True, а свойство набора записей
RecordCount (число записей) получает значение 0. При открытии объекта
Recordset, который содержит хотя бы одну запись, первая запись набора
становится текущей записью, а свойства BOF и EOF получают значения
False. Данные свойства сохраняют значения False до тех пор, пока
указатель текущей записи не переместится за пределы начала или конца набора
записей при использовании, соответственно, методов MovePrevious или
MoveNext, соответственно. После выхода за пределы набора записей текущая
запись становится неопределенной.
После удаления последней оставшейся записи
объекта Recordset свойства BOF и EOF могут сохранять
значение False до тех пор, пока не будет предпринята попытка изменить
положение указателя текущей записи.
При вызове метода MoveLast для
объекта Recordset, содержащего записи, текущей записью становится
последняя запись набора. Если после этого вызвать метод MoveNext, то
текущая запись становится неопределенной, а свойство EOF получает
значение True. Аналогично, при вызове метода MoveFirst для
непустого объекта Recordset текущей записью становится первая запись
набора. Последующий вызов метода MovePrevious приводит к тому, что
текущая запись становится неопределенной, а свойство BOF получает
значение True.>br> Как правило, при работе со всеми записями из
объекта Recordset в программе задают перемещение в цикле по записям с
помощью метода MoveNext до тех пор, пока свойство EOF не получит
значение True.
Вызов метода MoveNext или MovePrevious,
когда, соответственно, свойство EOF или BOF имеет значение
True, приводит к возникновению ошибки.
В следующей таблице показано,
какие из методов группы Move можно применять при различных комбинациях
значений свойств BOF и EOF.
MoveFirst, MovePrevious, MoveNext, MoveLast Move < 0 Move 0 Move > 0 BOF=True, EOF=False Допускается Ошибка Ошибка Допускается BOF=False, EOF=True Допускается Допускается Ошибка Ошибка Оба True Ошибка Ошибка Ошибка Ошибка Оба False Допускается Допускается Допускается Допускается
Допустимость применения метода из группы Move еще не означает, что
метод обязательно обнаружит запись. Это просто означает, что попытка выполнить
указанный метод Move является допустимой и не приведет к ошибке. В результате
вызова метода из группы Move состояние свойств BOF и EOF
может измениться.
При вызове метода OpenRecordset неявно выполняется
метод MoveFirst. Таким образом, в результате вызове метода
OpenRecordset для пустого набора записей свойства BOF и EOF
получают значение True. (Результаты неудачной попытки выполнить метод
MoveFirst представлены в приведенной ниже таблице).
Все методы группы
Move, в которых успешно обнаруживается запись, задают для свойств
BOF и EOF значение False.
В рабочей области Microsoft
Jet при добавлении записи в пустой объект Recordset, свойство
BOF получает значение False, а свойство EOF сохраняет
значение True, указывающее, что позиция текущей записи находится в конце
объекта Recordset. В рабочей области ODBCDirect оба свойства
BOF и EOF получают значение False, указывающее, что позиция
текущей записи находится на новой записи.
Любой вызов метода Delete,
даже приводящий к удалению последней записи из набора записей, не изменяет
значения свойств BOF и EOF.
Результаты для свойств BOF и
EOF вызова одного из методов Move, не приведшего к обнаружению
записи, представлены в следующей таблице.
BOF EOF MoveFirst, MoveLast True True Move 0 Без изменений Без изменений MovePrevious, Move < 0 True Без изменений MoveNext, Move > 0 Без изменений True
Пример
Следующая программа демонстрирует использование свойств BOF
и EOF для перемещения назад и вперед по объекту Recordset.
Sub BOFX()
Dim dbsNorthwind As Database
Dim rstCategories As Recordset
Dim strMessage As String
Set dbsNorthwind = OpenDatabase("Борей.mdb")
Set rstCategories = dbsNorthwind.OpenRecordset("Типы", dbOpenSnapshot)
With rstCategories
' Заполняет объект Recordset.
.MoveLast
.MoveFirst
Do While True
' Отображает сведения о текущей записи
' и принимает данные от пользователя.
strMessage = "Категория: " & !Категория & vbCr & "(запись " & (.AbsolutePosition + 1) & _
" из " & .RecordCount & ")" & vbCr & vbCr & "1 - вперед, 2 - назад"
' Переход вперед или назад и перехват меток BOF или EOF.
Select Case InputBox(strMessage)
Case 1
.MoveNext
If .EOF Then
MsgBox "Конец файла!" & vbCr & "Указатель передвинут на последнюю запись."
.MoveLast
End If
Case 2
.MovePrevious
If .BOF Then
MsgBox "Начало файла!" & vbCr & "Указатель передвинут на первую запись."
.MoveFirst
End If
Case Else
Exit Do
End Select
Loop
.Close
End With
dbsNorthwind.Close
End Sub